<h1>Test Blueprint</h1>
<p><img alt="Testblueprintscreenshot" src="/pages/products/hapao/hapao-testblueprintscreenshot.png"></p>
<p>The encapsulating boxes represent classes (<code>C1</code>, <code>C2</code> and <code>T</code>). Inheritance is indicated with an edge between classes. Subclasses are below their superclass. <code>C1</code> is the superclass of <code>C2</code>. The superclass of <code>T</code> is not part of the analysis. The green border within a class box indicates a unit test. </p>
<p>Inner boxes represent methods. <code>C1</code> defines five methods, <code>a, b, c, d</code> and <code>e</code>. <code>C2</code> defines one method, <code>f</code>. Each method is represented as a small box, visually defined with fives dimensions:</p>
<ul>
	<li>height is the cyclomatic complexity of the method. Th more the method takes different paths at execution time, the taller the box will be (<em>e.g.</em> Method <code>b</code>).</li>
</ul>
<ul>
	<li>width is the number of different methods that call the method when running the tests. A wide method (<code>f</code>) means the method has been executed many times by the tests. A thin method (<code>a</code>, <code>b</code>, <code>c</code>) means the method has been executed zero to very a few times.</li>
</ul>
<ul>
	<li>gray intensity reflects the number of times the method has been executed. A dark method (<code>d</code>, <code>f</code>) has been executed many times. A light or gray-toned method (<code>c</code>) has been executed only a few times.</li>
</ul>
<ul>
	<li>a red border color (light gray on a B&amp;W printout) means the method has not been executed (<code>a</code>, <code>b</code>). A blue border indicates abstract methods while a green one indicates that the method is a test method, defined in a unit test. </li>
</ul>
<ul>
	<li>the call-flow on self variable is indicated with edges of connecting points. This happens if the body of <code>a</code> contains the expression <code>self d</code>, meaning that the message <code>d</code> is sent to self. The method <code>a</code> calls <code>d</code> on <code>self</code>. The method <code>b</code> calls <code>d</code> and <code>c</code> on <code>self</code>. Note that we are focusing on the <em>call-flow</em> instead of the <em>control-flow</em>. </li>
</ul>

<h2>Contextual information:</h2>
<img alt="Popup" src="/pages/products/hapao/hapao-popup.png">
<p>Passing the mouse over a method displays a contextual popup window and the class border color is turns red. This popup window gives the full name of the method (MOFormsBuilder&gt;&gt;boundsOf: in the figure on the left), in addition to the invoking methods and invoked methods.</p>
<p>The popup window focused on the method from which it had been produced. The method is located at the center of the popup window. The incoming methods are situated in the upper section, while the outgoing methods are situated in the lower section.</p>
<p>The contextual popup window displays essential information about the context in which the method is used. For example, the method boundsOf: is invoked by three test methods and invokes many other non-complex methods (which could include utility methods). The window is displayed after a short delay in order to avoid image flickering when placing the mouse over two or more methods.</p>
